﻿#ifndef PLCSERVERMANAGE_H
#define PLCSERVERMANAGE_H

#include <QObject>
#include <QThread>
#include "PLCServerBase.h"
#include "PLCServerStatusWidget.h"
#include "WidgetPLCServer.h"

class PLCServerManage : public QObject
{
    Q_OBJECT
public:
    explicit PLCServerManage(QObject *parent = nullptr);
    QWidget* getPLCServerStatusWidget(){return wgtPLCServerStatus;}
    QWidget* getPLCServerManageWidget(){return mPLCServerManageWidget;}
    QMap<QString, PLCServerBase*> getPLCServerAll(){return mMapPLCServer;}
    //
    void setConfigWriteOneFunc(void (*func)(const PLCServerConfig& config));
    void setConfigReadAllFunc(QMap<QString, PLCServerConfig> (*func)());
    void setConfigReadOneFunc(PLCServerConfig (*func)(QString camName));
    void startWorker();
    void checkPLCServerStatus();
    void initPLCServerAll();
    void initWgtPLCServerStatus();
    void initPLCServerManageWidget();

public slots:
    void onAddOne(const PLCServerConfig& config);
    void onDeleteOne(const QString& name);
    void onConfigChanged(const PLCServerConfig& config);
signals:
    void sigPLCServerStatus(bool isOnLine);

private:
    void initPLCServerOne(PLCServerConfig config);

private:
    //函数指针，用于配置读写配置的函数
    void (*configWriteOne)(const PLCServerConfig& config);
    QMap<QString, PLCServerConfig> (*configReadAll)();
    PLCServerConfig (*configReadOne)(QString comName);

private:
    QMap<QString, PLCServerBase*> mMapPLCServer;
    QMap<QString, QThread*> mMapComThread;
    QMap<QString, bool> mMapComStart;
    PLCServerStatusWidget* wgtPLCServerStatus;
    WidgetPLCServer* mPLCServerManageWidget;
};

#endif // PLCSERVERMANAGE_H
